<?php

/**
 * 公用函数
 */

use service\DataService;
use service\NodeService;
use think\Db;

/**
 * 打印输出数据到文件
 * @param mixed $data
 * @param bool $replace
 * @param string|null $pathname
 */
function p($data, $replace = false, $pathname = null)
{
    is_null($pathname) && $pathname = RUNTIME_PATH . date('Ymd') . '.txt';
    $str = (is_string($data) ? $data : (is_array($data) || is_object($data)) ? print_r($data, true) : var_export($data, true)) . "\n";
    $replace ? file_put_contents($pathname, $str) : file_put_contents($pathname, $str, FILE_APPEND);
}

/**
 * 安全URL编码
 * @param array|string $data
 * @return string
 */
function encode($data)
{
    return str_replace(['+', '/', '='], ['-', '_', ''], base64_encode(serialize($data)));
}

/**
 * 安全URL解码
 * @param string $string
 * @return string
 */
function decode($string)
{
    $data = str_replace(['-', '_'], ['+', '/'], $string);
    $mod4 = strlen($data) % 4;
    !!$mod4 && $data .= substr('====', $mod4);
    return unserialize(base64_decode($data));
}

/**
 * RBAC节点权限验证
 * @param string $node
 * @return bool
 */
function auth($node)
{
    return NodeService::checkAuthNode($node);
}

/**
 * 设备或配置系统参数
 * @param string $name 参数名称
 * @param bool $value 默认是false为获取值，否则为更新
 * @return string|bool
 */
function sysconf($name, $value = false)
{
    static $config = [];
    if ($value !== false) {
        $config = [];
        $data = ['name' => $name, 'value' => $value];
        return DataService::save('SystemConf', $data, 'name');
    }
    if (empty($config)) {
        foreach (Db::name('SystemConf')->select() as $vo) {
            $config[$vo['name']] = $vo['value'];
        }
    }
    return isset($config[$name]) ? $config[$name] : '';
}

/**
 * 替换变量输出
 *
 * @param string $name
 * @param string $data
 * @return void
 * @author leolei <346991581@qq.com>
 */
function eval_conf($name, $data)
{
    $info = sysconf($name);
    extract($data);
    if ($info) {
        $info = str_replace("}", " ", str_replace("{", " $", $info));
        eval("\$info = \"$info\";");
        return $info;
    } else {
        return false;
    }
}

/**
 * array_column 函数兼容
 */
if (!function_exists("array_column")) {
    function array_column(array &$rows, $column_key, $index_key = null)
    {
        $data = [];
        foreach ($rows as $row) {
            if (empty($index_key)) {
                $data[] = $row[$column_key];
            } else {
                $data[$row[$index_key]] = $row[$column_key];
            }
        }
        return $data;
    }
}

/**
 * 字典类型获取 arr
 *
 * @param string $str
 * @return void
 * @author leolei <346991581@qq.com>
 */
function dict_arr($type)
{
    foreach (Db::name('SystemDict')->where('type', $type)->select() as $vo) {
        $list[$vo['value']] = $vo['name'];
    }
    return $list;
}

/**
 * 字典类型获取 list
 *
 * @param string $str
 * @return void
 * @author leolei <346991581@qq.com>
 */
function dict_list($type)
{
    $list = Db::name('SystemDict')->where('type', $type)->field('name,value')->select();
    return $list;
}

/**
 * 原样输出print_r的内容
 * @param string $content 待print_r的内容
 */
function pre($content)
{
    echo "<pre>";
    print_r($content);
    echo "</pre>";
}

/**
 * 时间戳格式化
 * @param int $time
 * @return string 完整的时间显示
 * @author huajie <banhuajie@163.com>
 */
function time_format($time = null, $format = 'Y-m-d H:i')
{
    $time = $time === null ? NOW_TIME : intval($time);
    return date($format, $time);
}
/**
 * 金钱格式化
 * @param int $money
 * @return string 标准的资金格式显示
 */
function format_price($money)
{
    return "￥" . number_format($money, 2);
}
/**
 * 百分比格式化
 *
 * @param atring $str
 * @return void
 * @author leolei <346991581@qq.com>
 */
function balance_format($str)
{
    return ($str*100)."%";
}
/**
 * 字符串截取指定长度
 *
 * @param string $str 待截取的字符串
 * @param integer $len 截取的长度
 * @param integer $start 从第几个字符开始截取
 * @param integer $suffix 是否在截取后的字符串后跟上省略号
 * @return void
 * @author leo.lei(346991581@qq.com)
 */
function cut_str($str, $len = 100, $start = 0, $suffix = 1)
{
    $str = strip_tags(trim(strip_tags($str)));
    $str = str_replace(array("\n", "\t","/ /"), "", $str);
    if (strlen($str) < $len*3) {//strlen统计字符长度 UFT-8占用三个字符
        return $str;
    } else {
        $strlen = mb_strlen($str);
        while ($strlen) {
            $array[] = mb_substr($str, 0, 1, "utf8");
            $str = mb_substr($str, 1, $strlen, "utf8");
            $strlen = mb_strlen($str);
        }
        $end = $len + $start;
        $str = '';

        for ($i = $start; $i < $end; $i++) {
            $str.=$array[$i];
        }
        return count($array) > $len ? ($suffix == 1 ? $str . "&hellip;" : $str) : $str;
    }
}
